package core

import (
	"sync"
	"time"
)

const NoExpire time.Duration = 0

// 缓存item值
type Item struct {
	// 值
	Value interface{}
	// 过期时间
	Expire int64
}

// 缓存结构体
type Cache struct {
	// 缓存map
	Items map[string]Item
	// 锁
	SM sync.RWMutex
	// 不过期时间
	NoExpire time.Duration
	// 前缀
	Prefix string
}

// 实现缓存的接口 接口
type CacheInterface interface {

	// 设置值 参数1:key  , 参数2:value , 参数2:有效时间 ; 如果存在则直接覆盖
	Set(string, interface{}, time.Duration) bool

	// 设置值 参数1:key  , 参数2:value , 参数2:有效时间 ;如果存在则抛出异常
	Add(string, interface{}, time.Duration) error

	// 修改值 参数1:key  , 参数2:value , 参数2:有效时间 ; 如果存在则修改,不存在则抛出异常
	Replace(string, interface{}, time.Duration) error

	// 获取值 参数:key
	Get(string, interface{}) (interface{}, error)

	// 清空所有缓存
	Flush()

	// 删除某个缓存
	Delete(string) error

	// 判断键值是否存在
	Has(string) bool
}
